package com.cskaoyan.javase.doublearray.traverse5;

/**
 * @description: 二维数组的遍历
 * @author: wuguidong@cskaoyan.onaliyun.com
 **/

import java.util.Arrays;

/**
 * 一维数组的遍历用for循环
 * 二维数组的遍历用for的套娃，嵌套for循环
 *
 * 同样的二维数组（多维）也有遍历方式：
 * Arrays.deepToString(数组)
 *
 */
public class Demo {
    public static void main(String[] args) {
        int[][] arr = {{1,2}, {2, 3}, {3, 4}, {777, 666, 777}};
        //System.out.println(arr);
        //traverse2DArray(arr);
        traverseTwoDArray2(arr);
        System.out.println(Arrays.deepToString(arr));

    }

    public static void traverse2DArray(int[][] arr) {
        //嵌套for循环遍历二维数组
        //外层for遍历二维数组的元素（一维数组）
        for (int i = 0; i < arr.length; i++) {
            //内层for遍历二维数组中一维数组的元素
            for (int j = 0; j < arr[i].length; j++) {
                System.out.println(arr[i][j]);
            }
        }
    }

    //改进[[],[],[],[]]
    public static void traverseTwoDArray2(int[][] arr) {
        System.out.print("[");
        //一维数组使用for循环，二维数组使用双层for循环去遍历
        //外层for应该遍历二维数组中的一维数组
        for (int i = 0; i < arr.length; i++) {
            //内层for应该遍历每一个一维数组
            for (int j = 0; j < arr[i].length; j++) {
                //这里就是具体元素的值
                if (j == 0 && j != arr[i].length - 1) {
                    //如果是每个数组中的开头元素且不是最后一个元素
                    System.out.print("[" + arr[i][j] + ", ");
                } else if (j == 0) {
                    //是开头也是最后的元素
                    System.out.print("[" + arr[i][j] + "], ");
                } else if ((j == arr[i].length - 1 && i != arr.length - 1)) {
                    //如果是每个一维数组的末尾元素,除最后一个
                    System.out.print(arr[i][j] + "], ");
                } else if ((i == arr.length - 1) && (j == arr[arr.length - 1].length - 1)) {
                    //如果是整个二维数组的最后一个元素
                    System.out.print(arr[i][j] + "]");
                } else {
                    //普通的在中间的元素
                    System.out.print(arr[i][j] + " ,");
                }
            }
        }
        System.out.println("]");
    }


}
